package runnable.germmy;

public class SynchronizedTest {

	
	int i=0;
	int k=0;
	//带synchronized
	public synchronized void count(){
		for(int j=0;j<10;j++){
			i++;
			System.out.println(Thread.currentThread().getName()+"^_^count,i的值为"+i);
		}
	}
	
	
	
	//不带synchronized  
	public void countForFree(){
		for(int j=0;j<10;j++){
			k++;
			System.out.println(Thread.currentThread().getName()+"^_^countForFree^_^,k的值为"+k);
		}
	}
	
	/**
	 * 1、用4个线程，分别访问2个带锁的方法，发现线程全部顺序执行，因为虽然是2个带锁的方法，但是对象锁的钥匙只有一把。
	 * 2、用2个线程，一个是访问有锁的方法，一个是访问无锁的方法，可以惊人的发现，线程又开始无序执行，说明无锁的方法不受对象锁的控制。
	 * @param args
	 */
	public static void main(String[] args) {

		SynchronizedTest synchronizedTest=new SynchronizedTest();

		
		/**
		 * 测试一：4个线程，全部执行带synchronized的
		 */
		new Thread(new MyThread(synchronizedTest)).start();
		new Thread(new MyThread(synchronizedTest)).start();
		new Thread(new MyThread(synchronizedTest)).start();
		new Thread(new MyThread(synchronizedTest)).start();
		new Thread(new MyThread(synchronizedTest)).start();
		
		
		
		
		
		/**
		 * 测试2：既有执行带synchronized线程的，也有执行不带synchronized线程的
		 */
		/*new Thread(new MyThread(synchronizedTest)).start();
		new Thread(new FreeThread(synchronizedTest)).start();*/
		
	}
	
	

}
